package org.opens.mybatisplus.handle;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.opens.mybatisplus.entity.enumObj3.EnumObj3Sex;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@MappedJdbcTypes(value = JdbcType.INTEGER)
@MappedTypes(value = EnumObj3Sex.class)
public class EnumObj3TypeHandle extends BaseTypeHandler<EnumObj3Sex> {

    /**
     * 说明:
     *      1. 作用于java向数据库中存储做转换时.
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, EnumObj3Sex parameter, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, parameter.getValue());
    }

    /**
     * 说明:
     *      1. 作用于从数据库中读取出来封装到java对象时;
     *      2. 通过列名进行设置;
     */
    @Override
    public EnumObj3Sex getNullableResult(ResultSet rs, String columnName) throws SQLException {
        int sex = rs.getInt(columnName);
        return EnumObj3Sex.getEnumObjByValue(sex);
    }

    /**
     * 说明:
     *      1. 作用于从数据库中读取出来封装到java对象时;
     *      2. 通过下标进行设置;
     */
    @Override
    public EnumObj3Sex getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        int sex = rs.getInt(columnIndex);
        return EnumObj3Sex.getEnumObjByValue(sex);
    }

    /**
     * 说明:
     *      1. 定义从存储过程中取值封装到java对象时;
     */
    @Override
    public EnumObj3Sex getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        int sex = cs.getInt(columnIndex);
        return EnumObj3Sex.getEnumObjByValue(sex);
    }
}
